home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / jikes / src / config.h < prev    next >
C/C++ Source or Header  |  1999-05-14  |  18KB  |  494 lines

  1. // $Id: config.h,v 1.8 1999/03/09 14:37:15 shields Exp $
  2. //
  3. // This software is subject to the terms of the IBM Jikes Compiler
  4. // License Agreement available at the following URL:
  5. // http://www.ibm.com/research/jikes.
  6. // Copyright (C) 1996, 1998, International Business Machines Corporation
  7. // and others.  All Rights Reserved.
  8. // You must accept the terms of that agreement to use this software.
  9. //
  10. #ifndef config_INCLUDED
  11. #define config_INCLUDED
  12.  
  13. #include <new.h>
  14. #include <iostream.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include <assert.h>
  18. #include "string.h"
  19. #include <stdio.h>
  20. #include <sys/stat.h>   
  21.  
  22. #ifdef TEST
  23. #define NO_LEAKS
  24. #endif
  25.  
  26. //
  27. // We need to set up certain environment information depending on
  28. // the host OS.
  29. //
  30. // Jikes uses the stat() system call to query file status. Traditional
  31. // unix systems use S_IFDIR and S_IFREG as names for constants used to
  32. // see if file is directory or regular file, respectively. POSIX-based
  33. // systems use __S_IFDIR and __S_IFREG, with S_IFDIR and S_IFREG being
  34. // defined as macros
  35. //
  36. #ifdef STAT_POSIX
  37. #define STAT_S_IFDIR __S_IFDIR
  38. #define STAT_S_IFREG __S_IFREG
  39. #else
  40. #define STAT_S_IFDIR S_IFDIR
  41. #define STAT_S_IFREG S_IFREG
  42. #endif
  43.  
  44. #ifdef STAT_POSIX_1
  45. // Some variants of HPUX want just one underscore
  46. #undef STAT_S_IFDIR
  47. #undef STAT_S_IFREG
  48. #define STAT_S_IFDIR _S_IFDIR
  49. #define STAT_S_IFREG _S_IFREG
  50. #endif
  51. //
  52. // These definitions are correct for all the platforms that
  53. // we are currently using. When porting this code, they should
  54. // always be reviewed.
  55. //
  56. #include <limits.h>
  57.  
  58. #if ! (UINT_MAX == 0xFFFFFFFF)
  59. #error unsigned int does not store values in the range 0..4294967295 in this system
  60. #else
  61.     typedef unsigned int u4;
  62. #endif
  63.  
  64. #if ! ((INT_MAX == 2147483647) && (INT_MIN + 1 == -INT_MAX))
  65. #error signed int does not store values in the range -2147483648..+2147483647 in this system
  66. #else
  67.     typedef signed int i4;
  68. #endif
  69.  
  70. #if ! (USHRT_MAX == 0xFFFF)
  71. #error unsigned short does not store values in the range 0..65535 in this system
  72. #else
  73.     typedef unsigned short u2;
  74. #endif
  75.  
  76. #if ! ((SHRT_MAX == 32767) && (SHRT_MIN + 1 == -SHRT_MAX))
  77. #error signed short does not store values in the range -32767..+32768 in this system
  78. #else
  79.     typedef signed short i2;
  80. #endif
  81.  
  82. #if ! (UCHAR_MAX == 0xFF)
  83. #error unsigned char does not store values in the range 0..255 in this system
  84. #else
  85.     typedef unsigned char u1;
  86. #endif
  87.  
  88. #if ! ((SCHAR_MAX == 127) && (SCHAR_MIN + 1 == -SCHAR_MAX))
  89. #error signed character does not store values in the range -128..+127 in this system
  90. #else
  91.     typedef signed char i1;
  92. #endif
  93.  
  94. //
  95. // Jikes can be compiled on systems using the EBCDIC character set, for which character and string
  96. // literals are translated by the compiler to EBCDIC and not ASCII, and so cannot be used to represent
  97. // ASCII/UNICODE values. Such values are constructed using the U_ values defined below. Thus
  98. // 'a' is represented using U_a, and ".java" is represented by an explicit literal:
  99. //    {U_DOT, U_j, U_a, U_v, U_a, U_NULL}
  100. // Variables associated with such literals have names beginning with US_ if the value are 16-bits
  101. // or U8S_ for 8 bits. The initial underscore is followed by the characters being represented, with
  102. // letters and digits representing themselves, and other values, all of which have a two character code,
  103. // surrounded by underscore. Thus the name used for the literal above is US__DO_java.
  104. //
  105. // All string-related values are represented internally in ASCII/UNICODE using the U_ values defined
  106. // below. EBCDIC systems also require that arguments to system functions representing file names be
  107. // converted from the internal form used by Jikes to EBCDIC, and such functions are referred to using
  108. // their usual name prefixed with "system_"; for example, a call to "fopen(..." is written "system_fopen(..."
  109. // The "system_" procedures are define in the file code.cpp.
  110. //
  111. enum U_chars
  112. {
  113.     U_NULL = 0,               U_NU = U_NULL,            // L'\0'
  114.     U_BACKSPACE = 8,          U_BS = U_BACKSPACE,       // L'\b'
  115.     U_HORIZONTAL_TAB = 9,     U_HT = U_HORIZONTAL_TAB,  // L'\t'
  116.     U_LINE_FEED = 10,         U_LF = U_LINE_FEED,       // L'\n'
  117.     U_FORM_FEED = 12,         U_FF = U_FORM_FEED,       // L'\f'
  118.     U_CARRIAGE_RETURN = 13,   U_CR = U_CARRIAGE_RETURN, // L'\r'
  119.  
  120.     U_CTL_Z = 26,
  121.     U_ESCAPE = 27,
  122.  
  123.     U_SPACE = 32,             U_SP = U_SPACE,             // L' '
  124.     U_EXCLAMATION = 33,       U_EX = U_EXCLAMATION,       // L'!'
  125.     U_DOUBLE_QUOTE = 34,      U_DQ = U_DOUBLE_QUOTE,      // L'"'
  126.     U_POUND = 35,             U_SH = U_POUND,             // L'#'
  127.     U_DOLLAR = 36,            U_DS = U_DOLLAR,            // L'$'
  128.     U_PERCENT = 37,           U_PE = U_PERCENT,           // L'%'
  129.     U_AMPERSAND = 38,         U_AM = U_AMPERSAND,         // L'&'
  130.     U_SINGLE_QUOTE = 39,      U_SQ = U_SINGLE_QUOTE,      // L'\''
  131.     U_LEFT_PARENTHESIS = 40,  U_LP = U_LEFT_PARENTHESIS,  // L'('
  132.     U_RIGHT_PARENTHESIS = 41, U_RP = U_RIGHT_PARENTHESIS, // L')'
  133.     U_STAR = 42,              U_ST = U_STAR,              // L'*'
  134.     U_PLUS = 43,              U_PL = U_PLUS,              // L'+'
  135.     U_COMMA = 44,             U_CM = U_COMMA,             // L'-'
  136.     U_MINUS = 45,             U_MI = U_MINUS,             // L','
  137.     U_DOT = 46,               U_DO = U_DOT,               // L'.'
  138.     U_SLASH = 47,             U_SL = U_SLASH,             // L'/'
  139.  
  140.     U_0 = 48, // L'0'
  141.     U_1 = 49, // L'1'
  142.     U_2 = 50, // L'2'
  143.     U_3 = 51, // L'3'
  144.     U_4 = 52, // L'4'
  145.     U_5 = 53, // L'5'
  146.     U_6 = 54, // L'6'
  147.     U_7 = 55, // L'7'
  148.     U_8 = 56, // L'8'
  149.     U_9 = 57, // L'9'
  150.  
  151.     U_COLON = 58,             U_CO = U_COLON,     // L':'
  152.     U_SEMICOLON = 59,         U_SC = U_SEMICOLON, // L';'
  153.     U_LESS = 60,              U_LT = U_LESS,      // L'<'
  154.     U_EQUAL = 61,             U_EQ = U_EQUAL,     // L'='
  155.     U_GREATER = 62,           U_GT = U_GREATER,   // L'>'
  156.     U_QUESTION = 63,          U_QU = U_QUESTION,  // L'?'
  157.     U_AT = 64,                                    // L'@'
  158.  
  159.     U_A = 65, // L'A'
  160.     U_B = 66, // L'B'
  161.     U_C = 67, // L'C'
  162.     U_D = 68, // L'D'
  163.     U_E = 69, // L'E'
  164.     U_F = 70, // L'F'
  165.     U_G = 71, // L'G'
  166.     U_H = 72, // L'H'
  167.     U_I = 73, // L'I'
  168.     U_J = 74, // L'J'
  169.     U_K = 75, // L'K'
  170.     U_L = 76, // L'L'
  171.     U_M = 77, // L'M'
  172.     U_N = 78, // L'N'
  173.     U_O = 79, // L'O'
  174.     U_P = 80, // L'P'
  175.     U_Q = 81, // L'Q'
  176.     U_R = 82, // L'R'
  177.     U_S = 83, // L'S'
  178.     U_T = 84, // L'T'
  179.     U_U = 85, // L'U'
  180.     U_V = 86, // L'V'
  181.     U_W = 87, // L'W'
  182.     U_X = 88, // L'X'
  183.     U_Y = 89, // L'Y'
  184.     U_Z = 90, // L'Z'
  185.  
  186.     U_LEFT_BRACKET = 91,      U_LB = U_LEFT_BRACKET,  // L'['
  187.     U_BACKSLASH = 92,         U_RS = U_BACKSLASH,     // L'\\'
  188.     U_RIGHT_BRACKET = 93,     U_RB = U_RIGHT_BRACKET, // L']'
  189.     U_CARET = 94,             U_CA = U_CARET,         // L'^'
  190.     U_UNDERSCORE = 95,        U_UN = U_UNDERSCORE,    // L'_'
  191.  
  192.     U_a = 97, // L'a'
  193.     U_b = 98, // L'b'
  194.     U_c = 99, // L'c'
  195.     U_d = 100, // L'd'
  196.     U_e = 101, // L'e'
  197.     U_f = 102, // L'f'
  198.     U_g = 103, // L'g'
  199.     U_h = 104, // L'h'
  200.     U_i = 105, // L'i'
  201.     U_j = 106, // L'j'
  202.     U_k = 107, // L'k'
  203.     U_l = 108, // L'l'
  204.     U_m = 109, // L'm'
  205.     U_n = 110, // L'n',
  206.     U_o = 111, // L'o'
  207.     U_p = 112, // L'p'
  208.     U_q = 113, // L'q'
  209.     U_r = 114, // L'r'
  210.     U_s = 115, // L's'
  211.     U_t = 116, // L't'
  212.     U_u = 117, // L'u'
  213.     U_v = 118, // L'v'
  214.     U_w = 119, // L'w'
  215.     U_x = 120, // L'x'
  216.     U_y = 121, // L'y'
  217.     U_z = 122, // L'z'
  218.  
  219.     U_LEFT_BRACE = 123,       U_OS = U_LEFT_BRACE,  // L'{'
  220.     U_BAR = 124,              U_BA = U_BAR,         // L'|'
  221.     U_RIGHT_BRACE = 125,      U_CS = U_RIGHT_BRACE, // L'}'
  222.     U_TILDE = 126,            U_TI = U_TILDE,       // L'~'
  223.  
  224.     U_chars_size
  225. };
  226.  
  227.  
  228. //
  229. // Constant strings used in the program.
  230. //
  231. class StringConstant
  232. {
  233. public:
  234.     static wchar_t US_AND[], // "&"
  235.                    US_AND_AND[], // "&&"
  236.                    US_AND_EQUAL[], // "&="
  237.                    US_COLON[], // ":"
  238.                    US_COMMA[], // ","
  239.                    US_DIVIDE[], // "/"
  240.                    US_DIVIDE_EQUAL[], // "/="
  241.                    US_DOT[], // "."
  242.                    US_EMPTY[], // ""
  243.